/*****************************
 *@file: BaseAnimationSkill
 *@author: 陈吕唐
 *@desc: 技能基础动画/视图控制控制(该类控制技能的动画效果)
 *@date: 2024-03-22	10:15
 *****************************/
import { _decorator, sp } from 'cc';
import SkillVO from '../../pojo/vo/SkillVO';
import FontSingle from '../FontSingle';
import GameUtils from '../GameUtils';
import { BaseSkill } from './BaseSkill';
const { ccclass, property } = _decorator;

@ccclass('BaseAnimationSkill')
export class BaseAnimationSkill extends BaseSkill {
    /****************************************************************************************************************
     *Readonly 常量
     ****************************************************************************************************************/

    /****************************************************************************************************************
     *Property 定义变量
     ****************************************************************************************************************/
    /**
     * 技能动画名称
     */
    protected animationName: string = ``;


    @property({ group: { name: 'UI', id: '1' }, type: sp.Skeleton, tooltip: `角色动画组件` })
    protected spine: sp.Skeleton = undefined!;
    /***************************************************************
     *PropertyUI 引用的控件
     ***************************************************************/

    /****************************************************************************************************************
     * Lifecycle 生命周期相关方法
     ****************************************************************************************************************/
    protected onLoad(): void {
        super.onLoad();
        if (!this.spine) {
            this.spine = this.node.getComponent(sp.Skeleton);
        }

        if (!this.spine) {
            this.spine = this.node.getComponentInChildren(sp.Skeleton);
        }
    }
    /****************************************************************************************************************
     * Public 公有方法
     ****************************************************************************************************************/
    public override updateValue(dto: SkillVO): void {
        super.updateValue(dto);
        this.animationName = dto.animationName;
    }

    /****************************************************************************************************************
     * private 私有方法
     ****************************************************************************************************************/
    /**
     * 播放技能动画效果
     * @param animation 
     * @returns 
     */
    protected playAnimation(animation: string = this.animationName): void {
        if (!animation) {
            return;
        }

        let promise = GameUtils.playAnimationPromise(animation, this.spine);
        promise.then(
            (value) => {
                this.spine.setAnimation(0, `idle`, true);
            }, (error) => {
            }
        )
    }

    /**
     * 显示当前使用技能名称
     * @param name 
     */
    protected showSkillName(name: string = this.skillName) {
        if (!name) {
            return;
        }

        FontSingle.single.show(name, this.node);
    }
    /****************************************************************************************************************
     * Property Get && Set 属性的 get && set 函数
     ****************************************************************************************************************/

}

